AI 四巨头 Google、DeepMind、Microsoft、Uber 深度学习框架大比拼
编者按:Google、Uber、DeepMind和Microsoft这四大科技公司是当前将深度学习研究广泛应用于自身业务的典型代表,跻身全球深度学习研究水平最高的科技公司之列。GPipe、Horovod、TF Replicator和DeepSpeed分别是这四家公司开发应用的深度学习框架,它们结合了深度学习研究及其基础设施的前沿技术,以提高深度学习模型的训练效率。这四个深度学习框架各有什么特点和优势呢?本文将对此做一个基本介绍。
作者 | Jesus Rodriguez
译者 | 苏本如,责编 | 夕颜 封图 | CSDN下载自东方IC 出品 | CSDN(ID:CSDNnews)
以下为译文:
大规模深度学习训练是在现实世界中构建深度学习解决方案最具挑战性的方面之一。 正如俗语所说,你最大的优点可以成为你最大的缺点,这一点自然也适用于深度学习模型。整个深度学习空间在一定程度上取决于深度神经网络(DNN)跨越GPU拓扑的能力。然而,同样的扩展能力导致了计算密集型程序的创建,这给大多数组织带来了操作上的挑战。从训练到优化,深度学习项目的生命周期需要健壮的基础设施构建块,以便能够并行化和扩展计算工作负载。
尽管深度学习框架正在快速发展,但相应的基础架构模型仍处于初期阶段。在过去的几年里,技术巨头谷歌、微软、优步(Uber)、DeepMind和其他公司定期发布了各自的研究成果,以便在大型GPU等基础设施上实现深度学习模型的并行化。
分布式和并行化计算的原理与深度学习程序生命周期的几乎所有阶段都息息相关。训练一个深度学习模型可能是一个非常昂贵的任务,运行也是如此。显而易见的答案是,可以利用大型GPU网络来分配深度学习程序的工作负载,但这绝非易事。众所周知,并发和并行编程是非常复杂的,尤其在应用于大型神经网络时更是如此。大型科技公司每天都在面临这些挑战,因为它们必须为关键业务应用运行极其复杂的深层神经网络。
今天,我想回顾一下谷歌、微软、DeepMind、和优步(Uber)等科技巨头用于并行化大规模深度学习模型训练的一些顶级框架。具体来说,我们将讨论以下四个框架:
谷歌的 GPipe
优步的Horovod
DeepMind的TF-Replicator
微软的 DeepSpeed
谷歌的GPipe
GPipe专注于为深度学习项目提高训练工作量。从基础设施的角度来看,训练过程的复杂性是深度学习模型中经常被忽视的一个方面。训练数据集越来越大,也越来越复杂。例如,在医疗保健领域,遇到需要使用数百万高分辨率图像进行训练的模型已不罕见。因此,训练过程通常需要很长的时间才能完成,并且由于内存和CPU消耗而导致的成本也非常高。
将深度学习模型的并行性分为数据并行性和模型并行性,是一种研究深度学习模型并行性的有效方法。数据并行方法使用大量的机器集群来拆分输入数据。模型并行性尝试将模型移至加速器上,如GPU或TPU,它们具有加速模型训练的特殊硬件。在较高的层次上,几乎所有的训练数据集都可以按照一定的逻辑进行并行化,但在模型上却不是这样。例如,一些深度学习模型是由可以独立训练的并行分支组成的。在这种情况下,经典的策略是将计算划分为多个分区,并将不同的分区分配给不同的分支。然而,这种策略在连续堆叠层的深度学习模型中存在不足,这给高效并行计算带来了挑战。
GPipe采用一种称为管道的技术,将数据和模型并行性结合起来。从概念上讲,GPipe是一个分布式机器学习库,它使用同步随机梯度下降和管道并行性进行训练,适用于任何由多个连续层组成的深度神经网络(DNN)。GPipe将一个模型划分到不同的加速器上,并自动将一个小批量的训练实例分割成更小的微批量。该模型允许GPipe的加速器并行运行,以最大限度地提高了训练过程的可伸缩性。
下图说明了具有多个连续层的神经网络的GPipe模型在四个加速器之间的划分。Fk是第k个划分的复合正向计算函数。Bk是对应的反向传播函数。Bk既依赖于上层的Bk+1,也依赖于Fk的中间激活。在图片的上部中,我们可以看到网络的顺序特性如何导致资源利用不足的。图片的下部显示了GPipe方法,其中输入的小批量(mini-batch)被划分为更小的宏批量(macro-batch),这些宏批量(macro-batch)可以由加速器同时处理。
谷歌开源了GPipe的一种实现,作为TensorFlow项目的一部分。
开源地址:https://github.com/tensorflow/lingvo/blob/master/lingvo/core/gpipe.py
优步的 Horovod
Horovod是Uber的机器学习(ML)堆栈之一,它已经在社区中非常流行,并且已经被DeepMind和OpenAI等人工智能巨头的研究团队采用。从概念上讲,Horovod是一个用于大规模运行分布式深度学习训练工作的框架。
Horovod利用诸如OpenMPI之类的消息传递接口栈,来使训练作业能够在高度并行和分布式的基础设施上运行,而无需进行任何修改。通过以下四个简单的步骤即可在Horovod中运行分布式TensorFlow训练工作:
hvd.init()初始化Horovod。 config.gpu_options.visible_device_list = str(hvd.local_rank())为每个TensorFlow进程分配一个GPU。 opt=hvd.DistributedOptimizer(opt)使用Horovod优化器包装任何常规的TensorFlow优化器,该优化器使用ring-allreduce来处理平均梯度。 hvd.BroadcastGlobalVariablesHook(0)将变量从第一个进程广播到所有其他进程,以确保一致的初始化。
1import tensorflow as tf
2import horovod.tensorflow as hvd# Initialize Horovod
3hvd.init()# Pin GPU to be used to process local rank (one GPU per process)
4config = tf.ConfigProto()
5config.gpu_options.visible_device_list = str(hvd.local_rank())# Build model…
6loss = …
7opt = tf.train.AdagradOptimizer(0.01)# Add Horovod Distributed Optimizer
8opt = hvd.DistributedOptimizer(opt)# Add hook to broadcast variables from rank 0 to all other processes during
9# initialization.
10hooks = [hvd.BroadcastGlobalVariablesHook(0)]# Make training operation
11train_op = opt.minimize(loss)# The MonitoredTrainingSession takes care of session initialization,
12# restoring from a checkpoint, saving to a checkpoint, and closing when done
13# or an error occurs.
14with tf.train.MonitoredTrainingSession(checkpoint_dir=“/tmp/train_logs”,
15 config=config,
16 hooks=hooks) as mon_sess:
17 while not mon_sess.should_stop():
18 # Perform synchronous training.
19 mon_sess.run(train_op)
1# Deploying a model with TpuReplicator.
2repl = tf_replicator.TpuReplicator(
3num_workers=1, num_tpu_cores_per_worker=8
4)
5with repl.context():
6model = resnet_model()
7base_optimizer = tf.train.AdamOptimizer()
8optimizer = repl.wrap_optimizer(base_optimizer)# ... code to define replica input_fn and step_fn.per_replica_loss = repl.run(step_fn, input_fn)
9train_op = tf.reduce_mean(per_replica_loss)with tf.train.MonitoredSession() as session:
10repl.init(session)
11for i in xrange(num_train_steps):
12session.run(train_op)
13repl.shutdown(session)
规模:DeepSpeed可以为运行高达1,000亿个参数的模型提供系统支持,这和其他训练优化框架相比,提高了10倍。 速度:在最初的测试中,DeepSpeed表现出的吞吐量比其他库高出4-5倍。 成本:可以使用DeepSpeed进行训练的模型,其成本比其他替代方案少三倍。 可用性:DeepSpeed不需要重构PyTorch模型,仅需几行代码即可使用。
https://towardsdatascience.com/the-frameworks-that-google-deepmind-microsoft-and-uber-use-to-train-deep-learning-models-at-scale-30be6295725
【END】
☞2020 年,AI 芯片内存哪家强?
☞拜托,别再问我什么是 B+ 树了
☞程序员为什么应该旗帜鲜明地反对“最佳实践”?
☞半小时训练亿级规模知识图谱,亚马逊AI开源知识图谱嵌入表示框架DGL-KE
☞“出道” 5 年采用率达 78%,Kubernetes 的成功秘诀是什么?
☞警惕!新骗术出现:这些虚假二维码生成器已成功盗取 4.6 万美元!
今日福利:评论区留言入选,可获得价值299元的「2020 AI开发者万人大会」在线直播门票一张。 快来动动手指,写下你想说的话吧。